package com.gm.wj.util;

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Random;

/**
* @Description: 关于时间的工具类
* @Param:
* @return:
* @Author: Huang_shengjun
* @time: 2020/8/21 0:59
*/
public class MyTime {

	public static void main(String[] args) {
		System.out.println("现在的时间-->" + MyTime.getStringDate());  // 现在的时间
		System.out.println("加了一分钟的时间-->" + MyTime.dateToStrLong(MyTime.getBeforeTimeForMin(1)));   // 加了一分钟的时间

		// 加了一天的时间 自动增加天数
		SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("增加时间-->" + MyTime.dateToStrLong(MyTime.getBeforeTime(myFormatter.format(new Date()), "yyyy-MM-dd HH:mm:ss", "hours", 24)));
		System.out.println("增加时间-->" + MyTime.dateToStrLong(MyTime.getBeforeTime(myFormatter.format(new Date()), "yyyy-MM-dd HH:mm:ss", "second", 10)));

		long a = 0,b = 0;
		try {
			a = Long.parseLong(strToDateLong1("2020-11-17 11:14:04"));
			b = Long.parseLong(strToDateLong1("2020-11-17 11:14:64"));
		} catch (NumberFormatException e) {
			e.printStackTrace();
		}

		boolean flag = a > b;
		System.out.println("比较大小--->" + flag);

		System.out.println(longBySize("比较大小--->" + "2020-13-17 11:14:04","2020-12-17 11:14:64"));

	}

	/**
	 * 时间日期转换   yyyyMMddHHmmss -->  yyyy-MM-dd hh:mm:ss
	 * @param strDate 字符串yyyyMMddHHmmss
	 * @return 字符串yyyy-MM-dd HH:mm:ss
	 */
	public static String strToDateLong2(String strDate) {
		Date date = new Date();
		try {
			date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(strDate);//先按照原格式转换为时间
		} catch (ParseException e) {
			e.printStackTrace();
		}
		String str = new SimpleDateFormat("yyyyMMddHHmmss").format(date);//再将时间转换为对应格式字符串
		return str;
	}

	/**
	 * 时间日期转换  yyyy-MM-dd hh:mm:ss  -->  yyyyMMddHHmmss
	 * @param strDate 字符串yyyyMMddHHmmss
	 * @return 字符串yyyy-MM-dd HH:mm:ss
	 */
	public static String strToDateLong1(String strDate) {
		Date date = new Date();
		try {
			date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(strDate);//先按照原格式转换为时间
		} catch (ParseException e) {
			e.printStackTrace();
		}
		String str = new SimpleDateFormat("yyyyMMddHHmmss").format(date);//再将时间转换为对应格式字符串
		return str;
	}

	/**
	 * 两个时间日期比较大小  yyyy-MM-dd hh:mm:ss
	 * @param strDate
	 * @return 字符串yyyy-MM-dd HH:mm:ss
	 */
	public static boolean longBySize(String strDate1,String strDate2) {
		Date date1 = new Date();
		Date date2 = new Date();
		try {
			date1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(strDate1);//先按照原格式转换为时间
			date2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(strDate2);//先按照原格式转换为时间
		} catch (ParseException e) {
			e.printStackTrace();
		}
		String str1 = new SimpleDateFormat("yyyyMMddHHmmss").format(date1);//再将时间转换为对应格式字符串
		String str2 = new SimpleDateFormat("yyyyMMddHHmmss").format(date2);//再将时间转换为对应格式字符串

		long a = 0,b = 0;
		try {
			a = Long.parseLong(str1);
			b = Long.parseLong(str2);
		} catch (NumberFormatException e) {
			e.printStackTrace();
		}

		boolean flag = a > b;
		return flag;
	}
	
	/**
	 * 获取当前时间，格式为 yyyy-MM-dd HH:mm
	 * @return
	 * Date
	 */
	public static Date getNewDateTime_yyyy_MM_dd_HH_mm_ss() {
		Date ret = null;
		try {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
			ret = sdf.parse(sdf.format(new Date()));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return ret;
	}
	
	/**
	 * 获取当前时间延后 delayHoursCount 个小时的时间
	 * @param delayHoursCount 延后的时间，小时
	 */
	public static Date getDelayDateTime_yyyy_MM_dd_HH_mm_ss(int delayHoursCount) {
		Date ret = null;
		try {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
			// new Date().getTime() 当前时间
			ret = sdf.parse(sdf.format(new Date(new Date().getTime() + 60 * 60 * 1000 * delayHoursCount)));  //60 * 60 * 1000 一个小时
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return ret;
	}
	
	/**
	 * 获取现在时间
	 * 
	 * @return 返回时间类型 yyyy-MM-dd HH:mm:ss
	 */
	public static Date getNowDate() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateString = formatter.format(currentTime);
		ParsePosition pos = new ParsePosition(8);
		Date currentTime_2 = formatter.parse(dateString, pos);
		return currentTime_2;
	}

	/**
	 * 获取现在时间
	 * 
	 * @return返回短时间格式 yyyy-MM-dd
	 */
	public static Date getNowDateShort() {
//		Date currentTime = new Date();
//		//System.out.println("currentTime.getTime()="+currentTime.getTime());
//		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
//		String dateString = formatter.format(currentTime);
//		//System.out.println("dateString="+dateString);
//		ParsePosition pos = new ParsePosition(8);
//		Date currentTime_2 = formatter.parse(dateString, pos);
//		
//		return currentTime_2;
		
		return null;
	}

	/**
	 * 获取现在时间
	 * 
	 * @return返回字符串格式 yyyy-MM-dd HH:mm:ss
	 */
	public static String getStringDate() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateString = formatter.format(currentTime);
		return dateString;
	}

	/**
	 * 获取现在时间
	 * 
	 * @return 返回短时间字符串格式yyyy-MM-dd
	 */
	public static String getStringDateShort() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		String dateString = formatter.format(currentTime);
		return dateString;
	}

	/**
	 * 获取现在时间的年份
	 * 
	 * @return返回字符串格式 yyyy
	 */
	public static String getStringNowYear() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
		String dateString = formatter.format(currentTime);
		return dateString;
	}
	
	/**
	 * 获取现在时间的年份和月份
	 * 
	 * @return返回字符串格式 yyyy-MM
	 */
	public static String getStringNowYearAndM() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
		String dateString = formatter.format(currentTime);
		return dateString;
	}
	
	/**
	 * 获取现在时间的天数
	 * 
	 * @return返回字符串格式 DD
	 */
	public static String getStringNowDay() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("DD");
		String dateString = formatter.format(currentTime);
		return dateString;
	}


	/**
	 * 获取时间 小时:分;秒 HH:mm:ss
	 * 
	 * @return
	 */
	public static String getTimeShort() {
		SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
		Date currentTime = new Date();
		String dateString = formatter.format(currentTime);
		return dateString;
	}

	/**
	 * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
	 * 
	 * @param strDate
	 * @return
	 */
	public static Date strToDateLong(String strDate) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		ParsePosition pos = new ParsePosition(0);
		Date strtodate = formatter.parse(strDate, pos);
		return strtodate;
	}

	/**
	 * 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss
	 * 
	 * @param dateDate
	 * @return
	 */
	public static String dateToStrLong(Date dateDate) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateString = formatter.format(dateDate);
		return dateString;
	}

	/**
	 * 将短时间格式时间转换为字符串 yyyy-MM-dd
	 * 
	 * @param dateDate
	 * @param k
	 * @return
	 */
	public static String dateToStr(Date dateDate) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		String dateString = formatter.format(dateDate);
		return dateString;
	}

	/**
	 * 将短时间格式时间转换为字符串 yyyy
	 * 
	 * @param dateDate
	 * @param k
	 * @return
	 */
	public static String dateToYear(Date dateDate) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy");
		String dateString = formatter.format(dateDate);
		return dateString;
	}

	/**
	 * 将短时间格式字符串转换为时间 yyyy-MM-dd
	 * 
	 * @param strDate
	 * @return
	 */
	public static Date strToDate(String strDate) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		ParsePosition pos = new ParsePosition(0);
		Date strtodate = formatter.parse(strDate, pos);
		return strtodate;
	}

	/**
	 * 得到现在时间
	 * 
	 * @return
	 */
	public static Date getNow() {
		Date currentTime = new Date();
		return currentTime;
	}

	/**
	 * 提取一个月中的最后一天
	 * 
	 * @param day
	 * @return
	 */
	public static Date getLastDate(long day) {
		Date date = new Date();
		long date_3_hm = date.getTime() - 3600000 * 34 * day;
		Date date_3_hm_date = new Date(date_3_hm);
		return date_3_hm_date;
	}

	/**
	 * 得到现在时间
	 * 
	 * @return 字符串 yyyyMMdd HHmmss
	 */
	public static String getStringToday() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");
		String dateString = formatter.format(currentTime);
		return dateString;
	}

	/**
	 * 得到现在的日期
	 * 
	 * @return 字符串 yyyy-MM-dd
	 */
	public static String getNowDateTwo(){
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat(" yyyy-MM-dd ");
		String dateString = formatter.format(currentTime);
		return dateString;
		
	}
	/**
	 * 得到现在小时
	 */
	public static String getHour() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateString = formatter.format(currentTime);
		String hour;
		hour = dateString.substring(11, 13);
		return hour;
	}

	/**
	 * 得到现在分钟
	 * 
	 * @return
	 */
	public static String getTime() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateString = formatter.format(currentTime);
		String min;
		min = dateString.substring(14, 16);
		return min;
	}

	/**
	 * 根据用户传入的时间表示格式，返回当前时间的格式 如果是yyyyMMdd，注意字母y不能大写。
	 * 
	 * @param sformat
	 *            yyyyMMddhhmmss
	 * @return
	 */
	public static String getUserDate(String sformat) {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat(sformat);
		String dateString = formatter.format(currentTime);
		return dateString;
	}

	/**
	 * 根据用户传入的时间表示格式，返回当前时间的格式 如果是yyyyMMdd，注意字母y不能大写。
	 * 
	 * @param sformat
	 *            yyyyMMddhhmmss
	 * @param date  需要格式化的时间串        
	 * @return
	 */
	public static String getUserDate(String sformat ,Date date){
		SimpleDateFormat formatter = new SimpleDateFormat(sformat);
		String dateString = formatter.format(date);
		return dateString;
	}
	/**
	 * 二个小时时间间的差值,必须保证二个时间都是"HH:MM"的格式，返回字符型的分钟
	 */
	public static String getTwoHour(String st1, String st2) {
		String[] kk = null;
		String[] jj = null;
		kk = st1.split(":");
		jj = st2.split(":");
		if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0]))
			return "0";
		else {
			double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1])
					/ 60;
			double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1])
					/ 60;
			if ((y - u) > 0)
				return y - u + "";
			else
				return "0";
		}
	}

	/**
	 * 得到二个日期间的间隔天数
	 */
	public static String getTwoDay(String sj1, String sj2) {
		SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		long day = 0;
		try {
			Date date = myFormatter.parse(sj1);
			Date mydate = myFormatter.parse(sj2);
			day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
		} catch (Exception e) {
			return "";
		}
		return day + "";
	}
	
	/**
	 * 判断时间是否在时间段内
	 * 
	 * @param date
	 *            当前时间 yyyy-MM-dd HH:mm:ss
	 * @param strDateBegin
	 *            开始时间 00:00:00
	 * @param strDateEnd
	 *            结束时间 00:05:00
	 * @return
	 */
	public static boolean isInDate(Date date, String strDateBegin,
			String strDateEnd) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String strDate = sdf.format(date);
		// 截取当前时间时分秒
		int strDateH = Integer.parseInt(strDate.substring(11, 13));
		int strDateM = Integer.parseInt(strDate.substring(14, 16));
		int strDateS = Integer.parseInt(strDate.substring(17, 19));
		// 截取开始时间时分秒
		int strDateBeginH = Integer.parseInt(strDateBegin.substring(0, 2));
		int strDateBeginM = Integer.parseInt(strDateBegin.substring(3, 5));
		int strDateBeginS = Integer.parseInt(strDateBegin.substring(6, 8));
		// 截取结束时间时分秒
		int strDateEndH = Integer.parseInt(strDateEnd.substring(0, 2));
		int strDateEndM = Integer.parseInt(strDateEnd.substring(3, 5));
		int strDateEndS = Integer.parseInt(strDateEnd.substring(6, 8));
		if ((strDateH >= strDateBeginH && strDateH <= strDateEndH)) {
			// 当前时间小时数在开始时间和结束时间小时数之间
			if (strDateH > strDateBeginH && strDateH < strDateEndH) {
				return true;
				// 当前时间小时数等于开始时间小时数，分钟数在开始和结束之间
			} else if (strDateH == strDateBeginH && strDateM >= strDateBeginM
					&& strDateM <= strDateEndM) {
				return true;
				// 当前时间小时数等于开始时间小时数，分钟数等于开始时间分钟数，秒数在开始和结束之间
			} else if (strDateH == strDateBeginH && strDateM == strDateBeginM
					&& strDateS >= strDateBeginS && strDateS <= strDateEndS) {
				return true;
			}
			// 当前时间小时数大等于开始时间小时数，等于结束时间小时数，分钟数小等于结束时间分钟数
			else if (strDateH >= strDateBeginH && strDateH == strDateEndH
					&& strDateM <= strDateEndM) {
				return true;
				// 当前时间小时数大等于开始时间小时数，等于结束时间小时数，分钟数等于结束时间分钟数，秒数小等于结束时间秒数
			} else if (strDateH >= strDateBeginH && strDateH == strDateEndH
					&& strDateM == strDateEndM && strDateS <= strDateEndS) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
	
	/**
	 * 把Timestamp类型转换为String类型
	 * @param ts
	 * @return
	 */
	public static String timestampToStr(long tsLong){
		Timestamp ts = new Timestamp(tsLong);   
        String tsStr = "";   
        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
        try {   
            //方法一   
            tsStr = sdf.format(ts);   
            //System.out.println(tsStr);   
            //方法二   
            //tsStr = ts.toString();   
            //System.out.println(tsStr);   
        } catch (Exception e) {   
            e.printStackTrace();   
        }
        return tsStr;
	}
	
	/**
	 * @Description: stringToTimestamp1
	 * @param dateStr
	 * @return
	 * @author 唐泽 
	 * @date 2017年9月12日
	 */
	public static Timestamp stringToTimestamp1(String dateStr){
		 
		   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		   Calendar cal = Calendar.getInstance();
		   try {
		    Date date = sdf.parse(dateStr);
		    date.getTime();
		    cal.setTime(date);
		    return new Timestamp(cal.getTimeInMillis());
		   } catch (ParseException e) {
		    e.printStackTrace();
		   }
		 
		   cal.setTime(new Date());
		   return new Timestamp(cal.getTimeInMillis());
		}

	/*public static void main(String[] args) {
		//SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			//Timestamp timestamp = MyTime.stringToTimestamp("2016-05-27 09:57:03");
			Timestamp ts = new Timestamp(System.currentTimeMillis());   
			System.out.println("timestamp="+timestampToStr(ts.getTime()));
		} catch (Exception e) {
			e.printStackTrace();
		}
		
//		System.out.println(getBeforeTime(24));
		//System.out.println(getBeforeTime(myFormatter.format(new Date()), "yyyy-MM-dd HH:mm:ss", "hours", 24));
	}*/
	
	/**
	 * 当前时间，前推或后推小时,其中hour表示小时.
	 * @param hour 小时
	 * @return 时间
	 */
//	public static Date getBeforeTime(int hour) {
////		Date date1 = new Date();
////		try {
////			long Time = (date1.getTime() / 1000) - hour * 60 * 60;
////			date1.setTime(Time * 1000);
////		} catch (Exception e) {
////		}
//		Calendar calendar = Calendar.getInstance();
//		calendar.roll(Calendar.HOUR_OF_DAY, hour);
//		//calendar.roll(Calendar.MINUTE, hour * 60 * 60);
//		Date date = calendar.getTime();
//		
//		return date;
//	}
	
	/**
	 * 日期加减天数、小时、分钟 ，超过当天24点的会自动转到下一天 <br>
	 * 调用方式<br>
	 * SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br>
	 * System.out.println(getBeforeTime(myFormatter.format(new Date()), "yyyy-MM-dd HH:mm:ss", "hours", 24));<br>
	 * <br>
	 * @param dateYMDHMS
	 *            - 日期字符串（格式为format指定的格式）
	 * @param format
	 *            - 指定dateYMDHMS的日期格式
	 * @param unit
	 *            - 日期加减的单位（可以是天数-days、小时-hours、分钟-minutes、秒-second）
	 * @param amount
	 *            - 要加减的数量
	 * @return 返回加减后的日期（格式为format指定的格式）
	 */
	public static Date getBeforeTime(String dateYMDHMS, String format, String unit, int amount) {
		try {

			Calendar calendar = Calendar.getInstance();
			SimpleDateFormat sdf = new SimpleDateFormat(format);
			calendar.setTime(sdf.parse(dateYMDHMS));
			if (unit.equals("day") || unit.equals("days")) {
				calendar.add(Calendar.DAY_OF_YEAR, amount);
			} else if (unit.equals("hour") || unit.equals("hours")) {
				calendar.add(Calendar.HOUR_OF_DAY, amount);
			} else if (unit.equals("minute") || unit.equals("minutes")) {
				calendar.add(Calendar.MINUTE, amount);
			} else if (unit.equals("second") || unit.equals("minutes")) {
				calendar.add(Calendar.SECOND, amount);
			}
			//return sdf.format(calendar.getTime());
			return calendar.getTime();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 当前时间，前推或后推分钟,其中min表示分钟.
	 * @param min 分钟 ，+为未来时间，-为过去时间
	 * @return 时间
	 */
	public static Date getBeforeTimeForMin(int min) {
		Date date1 = new Date();
		try {
			long Time = (date1.getTime() / 1000) + min * 60;
			date1.setTime(Time * 1000);
		} catch (Exception e) {
		}
		return date1;
	}
	
	/**
	 * 当前时间，前推分钟,其中min表示分钟.
	 * @param min 分钟 ，-为过去时间
	 * @return 过去时间
	 */
	public static Date getAfterTimeForMin(int min) {
		Date date1 = new Date();
		try {
			long Time = (date1.getTime() / 1000) - min * 60;
			date1.setTime(Time * 1000);
		} catch (Exception e) {
		}
		return date1;
	}

	/**
	 * 获取当前时间的前N小时
	 */
	public static String getPreTime(String sj1, String jj) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String mydate1 = "";
		try {
			Date date1 = format.parse(sj1);
			long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60;
			date1.setTime(Time * 1000);
			mydate1 = format.format(date1);
		} catch (Exception e) {
		}
		return mydate1;
	}

	/**
	 * 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数
	 */
	public static String getNextDay(String nowdate, String delay) {
		try {
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			/*SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");*/
			String mdate = "";
			Date d = strToDate(nowdate);
			long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24
					* 60 * 60;
			d.setTime(myTime * 1000);
			mdate = format.format(d);
			return mdate;
		} catch (Exception e) {
			return "";
		}
	}

	
	/**
	 * 
	 * @param delay
	 * @return
	 * @throws ParseException
	 */
	public static String getNextDayThree(String nowDay,int deley) throws ParseException{
		SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date  d = df.parse(nowDay);     
		Calendar cal=Calendar.getInstance();
		cal.setTime(d);
		cal.add(Calendar.DATE, deley);  
		return df.format(cal.getTime());
	}
	
	/**
	 * 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数
	 */
	public static Date getNextDayDate(int delay) {
		try {
			Date d = new Date();
			long myTime = (d.getTime() / 1000) + delay * 24
					* 60 * 60;
			d.setTime(myTime * 1000);
			return d;
		} catch (Exception e) {
			return null;
		}
	}

	/**
	 * 判断是否润年
	 * 
	 * @param ddate
	 * @return
	 */
	public static boolean isLeapYear(String ddate) {

		/**
		 * 详细设计： 1.被400整除是闰年，否则： 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
		 * 3.能被4整除同时能被100整除则不是闰年
		 */
		Date d = strToDate(ddate);
		GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
		gc.setTime(d);
		int year = gc.get(Calendar.YEAR);
		if ((year % 400) == 0)
			return true;
		else if ((year % 4) == 0) {
			if ((year % 100) == 0)
				return false;
			else
				return true;
		} else
			return false;
	}

	/**
	 * 返回美国时间格式 26 Apr 2006
	 * 
	 * @param str
	 * @return
	 */
	public static String getEDate(String str) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		ParsePosition pos = new ParsePosition(0);
		Date strtodate = formatter.parse(str, pos);
		String j = strtodate.toString();
		String[] k = j.split(" ");
		return k[2] + k[1].toUpperCase() + k[5].substring(2, 4);
	}

	/**
	 * 获取一个月的最后一天
	 * 
	 * @param dat
	 * @return
	 */
	public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd
		String str = dat.substring(0, 8);
		String month = dat.substring(5, 7);
		int mon = Integer.parseInt(month);
		if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8
				|| mon == 10 || mon == 12) {
			str += "31";
		} else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
			str += "30";
		} else {
			if (isLeapYear(dat)) {
				str += "29";
			} else {
				str += "28";
			}
		}
		return str;
	}

	/**
	 * 判断二个时间是否在同一个周
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static boolean isSameWeekDates(Date date1, Date date2) {
		Calendar cal1 = Calendar.getInstance();
		Calendar cal2 = Calendar.getInstance();
		cal1.setTime(date1);
		cal2.setTime(date2);
		int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
		if (0 == subYear) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2
					.get(Calendar.WEEK_OF_YEAR))
				return true;
		} else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
			// 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2
					.get(Calendar.WEEK_OF_YEAR))
				return true;
		} else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
			if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2
					.get(Calendar.WEEK_OF_YEAR))
				return true;
		}
		return false;
	}

	/**
	 * 产生周序列,即得到当前时间所在的年度是第几周
	 * 
	 * @return
	 */
	public static String getSeqWeek() {
		Calendar c = Calendar.getInstance(Locale.CHINA);
		String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
		if (week.length() == 1)
			week = "0" + week;
		String year = Integer.toString(c.get(Calendar.YEAR));
		return year + week;
	}

	/**
	 * 获得一个日期所在的周的星期几的日期，如要找出2002年2月3日所在周的星期一是几号
	 * 
	 * @param sdate
	 * @param num
	 * @return
	 */
	public static String getWeek(String sdate, String num) {
		// 再转换为时间
		Date dd = MyTime.strToDate(sdate);
		Calendar c = Calendar.getInstance();
		c.setTime(dd);
		if (num.equals("1")) // 返回星期一所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		else if (num.equals("2")) // 返回星期二所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
		else if (num.equals("3")) // 返回星期三所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
		else if (num.equals("4")) // 返回星期四所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
		else if (num.equals("5")) // 返回星期五所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
		else if (num.equals("6")) // 返回星期六所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
		else if (num.equals("0")) // 返回星期日所在的日期
			c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
		return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
	}

	/**
	 * 根据一个日期，返回是星期几的字符串
	 * 
	 * @param sdate
	 * @return
	 */
	public static String getWeek(String sdate) {
		// 再转换为时间
		Date date = MyTime.strToDate(sdate);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		// int hour=c.get(Calendar.DAY_OF_WEEK);
		// hour中存的就是星期几了，其范围 1~7
		// 1=星期日 7=星期六，其他类推
		return new SimpleDateFormat("EEEE").format(c.getTime());
	}

	public static String getWeekStr(String sdate) {
		String str = "";
		str = MyTime.getWeek(sdate);
		if ("1".equals(str)) {
			str = "星期日";
		} else if ("2".equals(str)) {
			str = "星期一";
		} else if ("3".equals(str)) {
			str = "星期二";
		} else if ("4".equals(str)) {
			str = "星期三";
		} else if ("5".equals(str)) {
			str = "星期四";
		} else if ("6".equals(str)) {
			str = "星期五";
		} else if ("7".equals(str)) {
			str = "星期六";
		}
		return str;
	}

	public static String getWeekZou(String sdate) {
		String str = "";
		str = MyTime.getWeek(sdate);
		if ("星期日".equals(str)) {
			str = "周日";
		} else if ("星期一".equals(str)) {
			str = "周一";
		} else if ("星期二".equals(str)) {
			str = "周二";
		} else if ("星期三".equals(str)) {
			str = "周三";
		} else if ("星期四".equals(str)) {
			str = "周四";
		} else if ("星期五".equals(str)) {
			str = "周五";
		} else if ("星期六".equals(str)) {
			str = "周六";
		}
		return str;
	}
	
	
	/**
	 * 两个时间之间的天数
	 * 
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static long getDays(String date1, String date2) {
		if (date1 == null || date1.equals(""))
			return 0;
		if (date2 == null || date2.equals(""))
			return 0;
		// 转换为标准时间
		SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		Date mydate = null;
		try {
			date = myFormatter.parse(date1);
			mydate = myFormatter.parse(date2);
		} catch (Exception e) {
		}
		long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
		return day;
	}
	
	
	/**
	 * 得到输入时间与现在时间之间的天数
	 * 
	 * 
	 * @param date2
	 * @return
	 */
	public static long getDays(Date date1) {
		if (date1 == null )
			return 0;
		System.out.println("123="+date1);
		// 转换为标准时间
		/*SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		java.util.Date date = null;
		java.util.Date mydate = new Date();
		try {
			date = myFormatter.parse(date1);
			//mydate = myFormatter.parse(date2);
		} catch (Exception e) {
		}*/
		Date mydate = new Date();
		System.out.println(date1);
		System.out.println("date="+date1.getTime());
		System.out.println("mydate="+mydate.getTime());
		System.out.println("date-mydate="+(date1.getTime()-mydate.getTime()));
		long day = (date1.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
		return day;
	}

	/**
	 * 形成如下的日历 ， 根据传入的一个时间返回一个结构 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是当月的各个时间
	 * 此函数返回该日历第一行星期日所在的日期
	 * 
	 * @param sdate
	 * @return
	 */
	public static String getNowMonth(String sdate) {
		// 取该时间所在月的一号
		sdate = sdate.substring(0, 8) + "01";

		// 得到这个月的1号是星期几
		Date date = MyTime.strToDate(sdate);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int u = c.get(Calendar.DAY_OF_WEEK);
		String newday = MyTime.getNextDay(sdate, (1 - u) + "");
		return newday;
	}

	/**
	 * 取得数据库主键 生成格式为yyyymmddhhmmss+k位随机数
	 * 
	 * @param k
	 *            表示是取几位随机数，可以自己定
	 */

	public static String getNo(int k) {

		return getUserDate("yyyyMMddhhmmss") + getRandom(k);
	}

	/**
	 * 返回一个随机数
	 * 
	 * @param i
	 * @return
	 */
	public static String getRandom(int i) {
		Random jjj = new Random();
		// int suiJiShu = jjj.nextInt(9);
		if (i == 0)
			return "";
		String jj = "";
		for (int k = 0; k < i; k++) {
			jj = jj + jjj.nextInt(9);
		}
		return jj;
	}
	
	/**
	 * 获取原始的随机数
	 * @return
	 */
	public static String getRanddom(){
		Random r=new Random();
		return r.nextInt()+"";
	}
	
	/**
	 * 获取原始时间+随机数
	 * @return
	 */
	public static String getNo() {
		return getUserDate("yyyyMMddhhmmss") + getRanddom();
	}

	/**
	 * 判断日期
	 * @param args
	 */
	public static boolean RightDate(String date) {

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		if (date == null)
			return false;
		if (date.length() > 10) {
			sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		} else {
			sdf = new SimpleDateFormat("yyyy-MM-dd");
		}
		try {
			sdf.parse(date);
		} catch (ParseException pe) {
			return false;
		}
		return true;
	}
	
	/**
	 * 获取Timestamp类型的当前时间
	 * @return
	 */
	public static Timestamp getNowForTimestamp(){
		return new Timestamp(System.currentTimeMillis());
	}
	/*public static void main(String[] args) {
		System.out.println("dd="+getNowForTimestamp());
	}*/
	
	/**
	 * 获取Timestamp类型的当前时间
	 * @return
	 */
	public static Timestamp getForTimestamp(Date date){
		return new Timestamp(date.getTime());
	}
	
	/**
	 * 将一个字符串形如 20150923160922,转换成 2015-09-23 16:09:22
	 * @param time
	 * @return 返回 Timestamp 类型的时间
	 * @throws ParseException
	 */
	public static Timestamp stringToTimestamp(String time) throws ParseException{
	    SimpleDateFormat formatter1=new SimpleDateFormat("yyyy-HH-dd HH:mm:ss");  
	    SimpleDateFormat formatter2=new SimpleDateFormat("yyyyHHddHHmmss");  
	    time=formatter1.format(formatter2.parse(time));
	    return Timestamp.valueOf(time);
	}
	
	/**
	 * 将一个字符 2015-09-23 16:09转为时间（注意，没有秒）
	 * @param time 时间
	 * @return 返回 Timestamp 类型的时间
	 * @throws ParseException
	 */
	public static Timestamp stringToTimestampNotss(String time) throws ParseException{
	    SimpleDateFormat formatter1=new SimpleDateFormat("yyyy-HH-dd HH:mm");
	    Timestamp ts = new Timestamp(formatter1.parse(time).getTime());
	    return ts;
	}
	
	/**
	 * 将一个字符 2015-09-23 16:09:00转为时间
	 * @param time 时间
	 * @return 返回 Timestamp 类型的时间
	 * @throws ParseException
	 */
	public static Timestamp stringToTimestampAll(String time) throws ParseException{
	    SimpleDateFormat formatter1=new SimpleDateFormat("yyyy-HH-dd HH:mm:ss");
	    Timestamp ts = new Timestamp(formatter1.parse(time).getTime());
	    return ts;
	}
	   
	
	/**
     * 日期格式字符串转换成时间戳
     * @param 
     * @param dateStr 字符串日期
     * @param format   如：yyyy-MM-dd HH:mm:ss
     *
     * @return
     */
	public static  String DateToTimeStamp(String dateStr,String format) {
		try{
			SimpleDateFormat sdf = new SimpleDateFormat(format);
			return String.valueOf(sdf.parse(dateStr).getTime()/1000);
		}catch(Exception e){
			
			System.out.println("time error"+e);
		}
		return "";
		
	}
	/** 
     * 时间戳转换成日期格式字符串 
     * @param seconds 精确到秒的字符串 
     * @param format "yyyy-MM-dd hh:mm:ss"
     * @return 
     */
	public static String TimeStampToDate(String seconds,String format){
		try{
			if(seconds == null || seconds.isEmpty() || seconds.equals("null")){
				return "";
			}
			
			if(format == null || format.isEmpty()){
				format = "yyyy-MM-dd hh:mm:ss";
				SimpleDateFormat sdf = new SimpleDateFormat(format);
				return sdf.format(new Date(Long.valueOf(seconds+"000")));
			}

		}catch(Exception e){
			System.out.println("date error"+e);
		}
		return "";
	}
	
}
